<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Window对象</title>
</head>
<body>
<!--
    BOM是浏览器对象类型
    定时器-延时函数
    JS执行机制
    location对象
    navigator对象
    history对象
-->
</body>
<script>
    /*
    * 定时器——延时函数
    *   JavaScript内置的一个用来让代码延迟执行的函数，叫setTimeout
    *   语法：
    *       setTimeout(回调函数 , 等待的毫秒数)
    *       // 仅仅只执行一次，所以可以理解为就是把一段代码延迟执行，平时省略window
    *
    * 清除延时函数
    *   let timer = setTimeout(回调函数 , 等待的毫秒数)
    *   clearTimeout(timer)
    * */
    // 设置回调时间2秒
    let go = setTimeout(function () {
        console.log('时间到了')
    } , 2000)
    // 清除定时器(不要这样写，因为这样会导致函数还没有执行完成就被清除掉了)
    // clearTimeout(go)

    /*
    * JS是一个单线程的脚本语言，在同一时间内只能做一件事——————如果一些代码执行时间过长会导致页面渲染不连贯，导致页面加载出现阻塞
    *   就比如延时执行函数setTimeout()
    * 为了解决这个问题JS中出现了同步和异步
    *   同步: 前一个任务结束后再执行后一个任务，程序的执行顺序和人物的排列顺序是一致的、同步的————————执行严格按照顺序
    *   异步: 在做一件任务时可能会花费很长时间，在做这件事的同时还可以去处理其他的事情。——————不按照顺序执行
    *        常见的异步任务:
    *           1.普通事件，如click、resize等
    *           2.资源加载，如load、error等
    *           3.定时器，包括setInterval、setTimeout等
    *   区别：同步任务都在主线程上执行，会形成一个执行栈；JS的异步是通过回调函数实现的，会形成一个任务队列（比如延时函数）
    *
    *   JS执行流程（事件循环——event loop）：
    *       先执行执行栈中的同步任务
    *       碰到异步任务就把异步任务放到任务队列中去
    *       一旦执行栈中的所有同步任务执行完毕，系统就会按次序读取任务队列中的异步任务，于是被读取的异步任务结束等待状态，进入执行栈开始执行
    * */
    console.log('设置1秒的延时函数')
    console.log(111)
    setTimeout(function () {
        console.log(222)
    } , 1000) // 这时JS会跳过这条等待时间为1秒的代码，转去执行下面的代码，1S之后再回来执行
    console.log(333)

    console.log('设置0秒的延时函数')
    console.log(111)
    setTimeout(function () {
        console.log(222)
    } , 0)
    console.log(333)
    /*
    * location的数据类型是对象，他拆分并保存了URL地址的各个组成部分
    * href属性获取完整的URL地址，对其赋值时用于地址的跳转
    * */
    console.log(location.href)
  //  location.href='http://www.baidu.com'
    /*
    * navigator对象
    *   检测浏览器的运行版本和运行平台
    *   常用于检测现在运行的是PC端浏览器还是mobile端的
    * */
    console.log(navigator)
    /*
    * history对象
    *   history的数据类型是对象，主要管理历史记录，该对象与浏览器地址栏的操作相对应，如前进、后退、历史记录等
    *   常用的属性和方法
    *       back() ———— 可以实现后退功能
    *       forward() ———— 前进功能
    *       go(参数) —————— 前进后退功能，参数如果是1就前进一个页面，如果是-1就后退一个页面
    * */

</script>
</html>